package com.optimus.facade.impl;

import com.optimus.bo.ElementoPublicitarioBO;
import com.optimus.bo.impl.ElementoPublicitarioBOImpl;
import com.optimus.common.cvo.CampanaVOList;
import com.optimus.common.cvo.ElementoPublicitarioCVO;
import com.optimus.common.cvo.ElementoPublicitarioCVOList;
import com.optimus.common.cvo.ElementoPublicitarioVOList;
import com.optimus.common.cvo.ElementoPublicitarioViewVOList;
import com.optimus.common.cvo.MapaCVOList;
import com.optimus.common.cvo.MercadoVOList;
import com.optimus.common.cvo.PuntosMapaCVOList;
import com.optimus.common.cvo.VerificadorVOList;
import com.optimus.common.util.ApplicationException;
import com.optimus.common.vo.CampanaVO;
import com.optimus.common.vo.ElementoPublicitarioVO;
import com.optimus.common.vo.MapaVO;
import com.optimus.common.vo.PuntosMapaVO;
import com.optimus.common.vo.ResultadoVO;
import com.optimus.common.vo.MercadoVO;
import com.optimus.common.vo.VerificadorVO;
import com.optimus.common.vo.view.ElementoPublicitarioViewVO;
import com.optimus.db.dao.CampanaDAO;
import com.optimus.db.dao.MapaDAO;
import com.optimus.db.dao.ElementoPublicitarioDAO;
import com.optimus.db.dao.MercadoDAO;
import com.optimus.db.dao.PuntosMapaDAO;
import com.optimus.db.dao.VerificadorDAO;
import com.optimus.db.dao.impl.CampanaDAOImpl;
import com.optimus.db.dao.impl.ElementoPublicitarioDAOImpl;
import com.optimus.db.dao.impl.MapaDAOImpl;
import com.optimus.db.dao.impl.VerificadorDAOImpl;
import com.optimus.db.dao.impl.MercadoDAOImpl;
import com.optimus.db.dao.impl.PuntosMapaDAOImpl;
import com.optimus.facade.PlaneamientoFacade;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 *
 * @author victor
 */
public class PlaneamientoFacadeImpl implements PlaneamientoFacade {

    private static Logger logger = LoggerFactory.getLogger(PlaneamientoFacadeImpl.class);

    private ElementoPublicitarioDAO elementoPublicitarioDAO;
    private MercadoDAO mercadoDAO;
    private VerificadorDAO verificadorDAO;
    private MapaDAO mapaDAO;
    private CampanaDAO campanaDAO;
    private ElementoPublicitarioBO publicitarioBO;
    private PuntosMapaDAO puntosMapaDAO;

    public PlaneamientoFacadeImpl(){
        elementoPublicitarioDAO = new ElementoPublicitarioDAOImpl();
        mercadoDAO = new MercadoDAOImpl();
        verificadorDAO = new VerificadorDAOImpl();
        mapaDAO = new MapaDAOImpl();
        campanaDAO = new CampanaDAOImpl();
        publicitarioBO = new ElementoPublicitarioBOImpl();
        puntosMapaDAO = new PuntosMapaDAOImpl();
        logger.debug("creado");
    }

    public MercadoVOList listarMercado(MercadoVO mercadoVO) throws ApplicationException {
        return mercadoDAO.listar(mercadoVO);
    }

    public CampanaVOList listarCampana (CampanaVO campanaVO) throws ApplicationException {
        return campanaDAO.listar(campanaVO);
    }
    
    public CampanaVOList listarCampanaActiva(CampanaVO campanaVO) throws ApplicationException {
        return campanaDAO.listarActiva(campanaVO);
    }

    public ElementoPublicitarioVOList listarEP (ElementoPublicitarioVO epvo) throws ApplicationException {
        return elementoPublicitarioDAO.listar(epvo);
    }


    public VerificadorVOList listarVerificador(VerificadorVO productoVO) throws ApplicationException {
        return verificadorDAO.listar(productoVO);
    }

    public MapaCVOList listarMapa(MapaVO mapaVO) throws ApplicationException {
        return publicitarioBO.listarMapa(mapaVO);
    }

    public ElementoPublicitarioCVOList listarEPMercadoCampana(ElementoPublicitarioCVO epcvo) throws ApplicationException {
        return elementoPublicitarioDAO.listarEPMercadoCampana(epcvo);
    }

    public ResultadoVO generarRutaOptima(ElementoPublicitarioCVOList elementoPublicitarioList, CampanaVO campanaVO) throws ApplicationException {
        return publicitarioBO.generarRutaOptima(elementoPublicitarioList,campanaVO);
    }

    public ResultadoVO generarMapas(CampanaVO campanaVO) throws ApplicationException {
        return publicitarioBO.generarMapas(campanaVO);
    }

    public PuntosMapaCVOList listarPuntosMapa(PuntosMapaVO puntosMapaVO) throws ApplicationException {
        return puntosMapaDAO.listar(puntosMapaVO);
    }
    
    public ElementoPublicitarioViewVOList listarEPVerificador(ElementoPublicitarioViewVO epvvo) throws ApplicationException {
        return elementoPublicitarioDAO.listarEPVerificador(epvvo);
    }

}
